/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package Relatorio;

import Utilitarios.ConectarMySQL;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import java.util.HashMap;
import java.util.Map;
import net.sf.jasperreports.engine.JRException;
import net.sf.jasperreports.engine.JRResultSetDataSource;
import net.sf.jasperreports.engine.JasperCompileManager;
import net.sf.jasperreports.engine.JasperFillManager;
import net.sf.jasperreports.engine.JasperPrint;
import net.sf.jasperreports.engine.JasperReport;
import net.sf.jasperreports.engine.design.JasperDesign;
import net.sf.jasperreports.engine.xml.JRXmlLoader;
import net.sf.jasperreports.view.JasperViewer;

/**
 * @author everson
 */
public class rel_Tabelas {
    private ConectarMySQL co = ConectarMySQL.getInstance();

    public void gerar(int qRelatorio, String titRelatorio, String tabela) 
        throws JRException , SQLException, ClassNotFoundException {
        Connection con = null;
        PreparedStatement pstm = null;
        ResultSet rs = null;
        String query = null;
        
        //gerando o jasper design
        JasperDesign desenho = JRXmlLoader.load( "src/Relatorio/r_Tabelas.jrxml" );
        if ("CIDADES".equals(tabela)) {
           desenho = JRXmlLoader.load( "src/Relatorio/r_Cidades.jrxml" );
        }
        if ("CADASTRODCF".equals(tabela)) {
           desenho = JRXmlLoader.load( "src/Relatorio/r_Fornecedores.jrxml" );
        }

        //compila o relatório
        JasperReport relatorio = JasperCompileManager.compileReport( desenho );

        //estabelece conexão
        con = co.getConexao();
        
        if (qRelatorio==0){
           if ("CIDADES".equals(tabela))
              query = "select * from "+tabela+" order by ID";
           if ("CADASTRODCF".equals(tabela))
               query = "select CADASTRODCF.COD_SIAFI, "+
                       "case CADASTRODCF.tipo "+
                           "when '1' then substring(cadastrodcf.cpf_cnpj from 1 for 3)||'.'||substring(cadastrodcf.cpf_cnpj from 4 for 3)||'.'|| "+
                                           "substring(cadastrodcf.cpf_cnpj from 7 for 3)||'-'||substring(cadastrodcf.cpf_cnpj from 10 for 2) "+
                           "when '2' then substring(cadastrodcf.cpf_cnpj from 1 for 2)||'.'||substring(cadastrodcf.cpf_cnpj from 3 for 3)||'.'|| "+
                                           "substring(cadastrodcf.cpf_cnpj from 6 for 3)||'/'||substring(cadastrodcf.cpf_cnpj from 9 for 4)||'-'|| "+
                                           "substring(cadastrodcf.cpf_cnpj from 13 for 2) "+
                           "end "+
                           "CPFCNPJ, "+
                           "CADASTRODCF.NOME_RAZAO, "+
                           "CIDADES.DESCRICAO as CIDADE "+
                       "from CADASTRODCF, CIDADES "+
                       "where CADASTRODCF.CIDADE=CIDADES.ID "+
                       "order by CPF_CNPJ ";
              //query = "select COD_SIAFI, CPF_CNPJ, NOME_RAZAO from CADASTRODCF order by COD_SIAFI";

//fiz este teste caso o ID da tabela fosse diferente de ID (tipo Codigo, Sequencial, etc...)
//           if ("CIDADES".equals(tabela)){
//              query = "select * from "+tabela+" order by ID";
//           }
        }
        if (qRelatorio==1){
           if ("CIDADES".equals(tabela)) 
              query = "select * from "+tabela+" order by DESCRICAO";
           if ("CADASTRODCF".equals(tabela))
               query = "select CADASTRODCF.COD_SIAFI, "+
                       "case CADASTRODCF.tipo "+
                           "when '1' then substring(cadastrodcf.cpf_cnpj from 1 for 3)||'.'||substring(cadastrodcf.cpf_cnpj from 4 for 3)||'.'|| "+
                                           "substring(cadastrodcf.cpf_cnpj from 7 for 3)||'-'||substring(cadastrodcf.cpf_cnpj from 10 for 2) "+
                           "when '2' then substring(cadastrodcf.cpf_cnpj from 1 for 2)||'.'||substring(cadastrodcf.cpf_cnpj from 3 for 3)||'.'|| "+
                                           "substring(cadastrodcf.cpf_cnpj from 6 for 3)||'/'||substring(cadastrodcf.cpf_cnpj from 9 for 4)||'-'|| "+
                                           "substring(cadastrodcf.cpf_cnpj from 13 for 2) "+
                           "end "+
                           "CPFCNPJ, "+
                           "CADASTRODCF.NOME_RAZAO, "+
                           "CIDADES.DESCRICAO as CIDADE "+
                       "from CADASTRODCF, CIDADES "+
                       "where CADASTRODCF.CIDADE=CIDADES.ID "+
                       "order by NOME_RAZAO ";
              //query = "select COD_SIAFI, CPF_CNPJ, NOME_RAZAO from CADASTRODCF order by NOME_RAZAO";
              
//fiz este teste caso a DESCRICAO da tabela fosse diferente de DESCRICAO (tipo Nome, RazãoSocial, etc...)
//           if ("USUARIOS".equals(tabela)) {
//              query = "select * from "+tabela+" order by NOME";
//           }
        }
        
        pstm = con.prepareStatement(query);
        rs = pstm.executeQuery();

        //implementação da interface JRDataSource para DataSource ResultSet
        JRResultSetDataSource jrRS = new JRResultSetDataSource( rs );

        //executa o relatório
        Map parametros = new HashMap();
        parametros.put("TITULO", titRelatorio);
        JasperPrint impressao = JasperFillManager.fillReport(relatorio, parametros, jrRS);

        //exibe o resultado
        JasperViewer viewer = new JasperViewer(impressao, false);
        viewer.setVisible(true);
    }
}
